package com.itbaizhan.springbootdemo5.controller;

import com.itbaizhan.springbootdemo5.domain.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;

//启动项目，访问http://localhost:8080/show及静态页面
@Controller
public class PageController {
    @GetMapping("/show")
    public  String showPage(Model model, HttpServletRequest request, HttpSession session){
        model.addAttribute("msg","hello thymeleaf");
       //时间格式  130指从1900年开始，往后130年，即2030年  月份从0开始，所以1代表2月
        model.addAttribute("date",new Date(130,1,1));
        //条件判断
        model.addAttribute("sex","女");
        model.addAttribute("id",10);
       //把数据添加到集合中，再遍历
        List<Users> users = new ArrayList<>();
        users.add(new Users(1,"sxt",33));
        users.add(new Users(2,"bai",23));
        users.add(new Users(3,"sheng",20));
        model.addAttribute("users",users);

        //遍历map
        Map<String,Users> map = new HashMap<>();
        map.put("user1",new Users(1,"sxt",33));
        map.put("user2",new Users(2,"bai",23));
        map.put("user3",new Users(3,"sheng",20));
        model.addAttribute("map",map);

        //准备域中的数据，让前端拿到
        /*thymeleaf也可以获取request，session，application(ServletContext)域中的数据*/
        request.setAttribute("req","HttpServletRequest");
        session.setAttribute("ses","HttpSession");
        session.getServletContext().setAttribute("app","application");

        //在路径中添加参数 (/show2)
        model.addAttribute("id","100");
        model.addAttribute("name","bzcxy");


        return "index";
    }
    //前端页面的URL写法
    //动态传参，通过/show中的model传给/show2 ,在前端页面显示
    @GetMapping("/show2")
    @ResponseBody //页面不跳转
    public String show2(String id,String name){
        return id+":"+name;
    }
    //Restful风格URL的写法
    //@PathVariable 是从路径中拿到时参数
    //从show方法中model拿到传递的参数，传给前端页面，再通过a标签传回show3
    @GetMapping("/show3/{id}/{name}")
    @ResponseBody
    public String show(@PathVariable String id,@PathVariable String name){
        return id+":"+name;
    }
}
/*Thymeleaf_变量输出
* th:text	将model中的值作为内容放入标签中
th:value	将model中的值放入input标签的value属性中*/

/*
Thymeleaf提供了一些内置对象可以操作数据，
内置对象可直接在模板中使用，
这些对象是以#引用的，操作字符串的内置对象为strings。-->


方法	                                说明
${#strings.isEmpty(key)}	判断字符串是否为空，如果为空返回true，否则返回false
${#strings.contains(msg,'T')}	判断字符串是否包含指定的子串，如果包含返回true，否则返回false
${#strings.startsWith(msg,'a')}	判断当前字符串是否以子串开头，如果是返回true，否则返回false
${#strings.endsWith(msg,'a')}	判断当前字符串是否以子串结尾，如果是返回true，否则返回false
${#strings.length(msg)}	        返回字符串的长度
${#strings.indexOf(msg,'h')}	查找子串的位置，并返回该子串的下标，如果没找到则返回-1
${#strings.substring(msg,2,5)}	截取子串，用法与JDK的subString方法相同
${#strings.toUpperCase(msg)}	字符串转大写
${#strings.toLowerCase(msg)}	字符串转小写

<span th:text="${#strings.isEmpty(msg)}"></span><br>
<span th:text="${#strings.contains(msg,'s')}"></span><br>
<span th:text="${#strings.length(msg)}"></span><br>
<span th:text="${#strings.toUpperCase(msg)}"></span><br>
<span th:text="${#strings.substring(msg,2,5)}"></span><br>
<span th:text="${#strings.startsWith(msg,'e')}"></span><br>
<span th:text="${#strings.endsWith(msg,'f')}"></span><br>
<span th:text="${#strings.indexOf(msg,'l')}"></span><br>
<span th:text="${#strings.toLowerCase(msg)}"></span><br>

*/


/*操作时间的内置对象为dates

方法	说明
${#dates.format(key)}	格式化日期，默认的以浏览器默认语言为格式化标准
${#dates.format(key,'yyyy/MM/dd')}	按照自定义的格式做日期转换
${#dates.year(key)}	取年
${#dates.month(key)}	取月
${#dates.day(key)}	取日
准备数据

model.addAttribute("date",new Date(130,01,01));
使用内置对象操作时间

<span th:text="${#dates.format(date)}"></span>
<hr/>
<span th:text="${#dates.format(date,'yyyy/MM/dd')}"></span>
<hr/>
<span th:text="${#dates.year(date)}"></span>
<span th:text="${#dates.month(date)}"></span>
<span th:text="${#dates.day(date)}"></span>*/

/*语法	            作用
th:if	            条件判断
th:switch/th:case	th:switch/th:case与Java中的switch语句等效。th:case="*"表示Java中switch的default，即没有case的值为true时显示th:case="*"的内容。*/

/*th:each	迭代器，用于循环迭代集合
*
* <table border="1" width="50%">
  <tr>
    <th>ID</th>
    <th>Name</th>
    <th>Age</th>
  </tr>
  <!-- 遍历集合的每一项起名为user -->
  <tr th:each="user : ${users}">
    <td th:text="${user.id}"></td>
    <td th:text="${user.name}"></td>
    <td th:text="${user.age}"></td>
  </tr>
</table>*/